package rkdwogus7.exam;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBCSetup {
	
		private static final String DRV = "oracle.jdbc.OracleDriver";
		private static final String URL = "jdbc:oracle:thin:@//localhost:1521/xe";
		private static final String USR = "scott";
		private static final String PWD = "TIGER";
		
		private static final String selectSQL = " select ? from ? where ? group by ? having ? order by ? desc ";
		private static final String insertSQL = " insert into ? VALUES ( ? ) ";
		private static final String modifySQL = " update ? set ? = ? where ? ";
		private static final String deleteSQL = " delete from ? where ? ";
		

		public static void main(String[] args) {
			// 1. JDBC 드라이버를 메모리에 적재하여 객체로 생성하고 이것을 DriverManager에 등록
			// 2. DriverManager의 getConnection method를 이용해서 데이터베이스 연결객체를 생성함(DB접속정보를 가져오는거야)
			// 3. PreparedStatement로 실행할 SQL문 객체를 생성 
			// 4. 실행하는 SQL문이 insert, update, delete라면 executeUpdate()를 사용하고 실행결과는 int 로 받음. 실행하는 SQL문이 select라면 executeQuery()를 사용하고 실행결과는 ResultSet 으로 받음
			// 5. ResultSet으로 받은 결과는 먼저 rs.next()로 읽어 올 레코드(행)를 가리킨 후 rs.getXXX( 필드번호 ) 또는 rs.getXXX( 필드이름 )으로 테이블의 각 필드 값을 처리할 수 있음
			// 6. JDBC 작업이 끝나면 연결중인 데이터베이스 접속을 끊고  관련 객체 (conn, ps, rs )는 메모리에서 제거함
			
			Connection conn = null;  // 연결객체 저장용
			PreparedStatement ps = null; // SQL 객체 생성용
			ResultSet rs = null; // 실행결과 저장용
			
			try {
				Class.forName( DRV );    // 1.
				conn = DriverManager.getConnection(URL, USR, PWD);    // 2.
				ps = conn.prepareStatement( insertSQL );
				int cnt = ps.executeUpdate();    // 4.
				System.out.println( cnt + "건의 데이터 입력" );
				
				ps.close();    // 또다른 SQL문 작성하기 위해 기존 ps 객체 제거
				
				ps = conn.prepareStatement( selectSQL );
				rs = ps.executeQuery();
				
				// ResultSet에서 결과를 레코드 단위로 꺼내 차례대로 출력
				while(rs.next()) {  // 5.
					System.out.println( rs.getInt(1) );
					System.out.println( rs.getString("name") );
				}
				
			} catch (Exception ex) {
				ex.printStackTrace();
			} finally {
				// 6. 
				// JDBC 작업이 끝난 후 메모리에서 객체 제거
				if ( rs != null )
					try {
						rs.close();
					} catch (SQLException e) {
						e.printStackTrace();
					}
				if ( ps != null )
					try {
						ps.close();
					} catch (SQLException e) {
						e.printStackTrace();
					}
				if ( conn != null )
					try {
						conn.close();
					} catch (SQLException e) {
						e.printStackTrace();
					}
			}
			
			
			
		}

		
		
	}



